在前三天的內容大略的探討了架構師的種類以及與軟體工程師的差異,架構師不僅需要有基本的技術知識,還要有視野和策略性的思考,與軟體工程師相比,需要更多的參與系統的設計和決策過程。
今天將深入探討軟體架構師所需的核心技能樹,根據Roadmap的總結,每位軟體架構師都必須掌握的一些技能包括:設計、決策、簡化、編碼、文件撰寫、溝通、估算(成本或是時間)、平衡(溝通上)、技術諮詢和市場推廣。
接著就從這幾點來做個簡單的說明
設計與架構在軟體開發中佔有核心地位,那麼哪些條件構成了好的設計,這是一個既重要又具挑戰性的問題。可以從理論和實踐兩方面來看待這個問題。
Model-View-Controller (MVC) 是一種架構模式,將應用程式分為三個主要組件群組:模型 (Models)、視圖 (Views) 和控制器 (Controllers)。此模式有助於實現關注點的分離。來源
下表為上述的一些名詞的敘述
專有名詞 | 定義 |
---|---|
反模式 | 反模式是處理重複出現問題的某些解決方案的後果,它是應用軟體中常見的有缺陷的過程的實現,產生的原因可能是開發人員不了解軟件開發實踐或沒有將設計模式應用正確 |
分析癱瘓 | 分析癱瘓是指當人們過度分析或思考一個問題時,可能導致決策的延遲或無法做出決策。 |
過度工程 | 過度工程指的是設計或建構一個產品、系統或過程時,使其比實際需要更為複雜,這可能是因為過度考慮未來的需求、想要包含所有可能的功能,或是僅僅因為技術上的挑戰。 |
架構師需要具備決策能力,並能夠指引項目或整個組織朝正確的方向前進。
辨識重要性:避免在次要的決策或活動上浪費時間和資源,要學會區分哪些是真正重要的,然後評估事物重要性時會考慮以下因素:
確定優先順序:某些決策對項目的成功至關重要。延遲這些決策可能導致權宜之計或開發停滯。有時,及時做出不完美的決策也比完全不做決策要好。建議使用敏捷軟體開發中的Weighted Shortest Job等方法,以確定決策的優先順序。
實際案例:在一個大型軟體開發項目中,團隊需要選擇合適的數據庫技術。架構師從多個角度評估了關聯型數據庫和NoSQL數據庫,並根據性能、成本和可擴展性等標準進行了深入比較,最終的決策是基於充分的資料分析,而非單純的直覺,且得到了所有利益相關者的一致認同。
作為解決方案架構師仍需了解開發者的日常工作,若不了解此工作方式可能會遇到以下問題:
為了克服這些挑戰,以下幾種習慣值得培養:
Technology Radar | An opinionated guide to technology frontiers | Thoughtworks是一個每年更新兩次的報告,它為軟體開發領域中的各種技術趨勢和實踐提供了專業的見解和建議。
由ThoughtWorks的技術領導人員基於在客戶項目中的實際經驗和觀察提供參考資訊,並且將技術分為四個象限分別為技術、工具、平台和技術語言與框架,其中每個象限中的技術都被標記在一個圈中,表示對其採用程度的建議。
上述的每一圈都有不同的意思:
技術雷達不僅是一個學習新技術的指南,也是一個反思和改進自己的技術實踐的工具,它可以幫助架構師識別自己的技術盲點和學習需求,也可以幫助與開發者和其他利益相關者進行有效的評估和思考,提供有價值的見解和建議。
軟體架構師的角色不僅僅是技術專家,更是一位具有策略性思考和廣泛視野的領導者,包含了一系列的核心技能,從設計、決策、編碼到溝通和市場推廣,以確保軟體的成功開發和部署。
明天會提到剩下的幾個技能需求,包含有一些比較偏向管理面的內容。